﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Engine;
using Game;
using Game.NetWork;
using Game.NetWork.Packages;
using Game.Server.PlayerEvent;
using Newtonsoft.Json;

namespace Game.Server.Plugins
{
    public class crt : ServerPlugin, IPlayerEnterGameEventHandle // 继承ServerPlugin类，实现IPlayerEnterGameEventHandle接口
    {// 插件版本
        public override int Version => 1000;
        // 插件名称
        public override string Name => "crt";
        // 传送点配置

        public static List<string> strihg = new List<string>();
        // 传送点配置路径

        public static string ConfigFilePath = "Plugins\\crt.json"; // 配置文件路径
        

        public byte FirstLevel => 0; // 第一个传送点等级

        public override void Initialize()//初始化插件
        {

            PlayerEnterGameEventManager.AddObject(this); // 注册玩家进入游戏事件         
        }

        public override void Load()//加载插件
        {
            if (File.Exists(ConfigFilePath))// 如果配置文件存在
            {
                using (StreamReader reader = File.OpenText(ConfigFilePath))// 读取配置文件
                {
                    string text = reader.ReadToEnd();// 读取文件内容
                    crt.strihg = JsonConvert.DeserializeObject<List<string>>(text);// 反序列化为字典
                }
            }
            else // 如果配置文件不存在
            {
                crt.strihg = new List<string> // 默认配置
                {
                    { "admins"},
                    { "admin"},
                };// 默认配置

                string configDirectory = Path.GetDirectoryName(ConfigFilePath); // 获取插件目录
                if (!Directory.Exists(configDirectory)) // 如果不存在
                {
                    Directory.CreateDirectory(configDirectory); // 创建目录
                }
                string defaultConfig = JsonConvert.SerializeObject(crt.strihg, Formatting.Indented);// 序列化为json格式
                File.WriteAllText(ConfigFilePath, defaultConfig);// 保存到文件

                Log.Information("[crt] 已创建默认配置文件: " + ConfigFilePath);// 输出提示信息
            }
        }

        public override void Save() // 保存插件
        {

        }

        public void PlayerEnter(PlayerData playerData)// 玩家进入游戏事件
        {

            bool isCreative = false; // 添加一个布尔变量来标记是否为创造模式
            foreach (var item in crt.strihg)// 遍历传送点配置
            {// 遍历
                if (item == playerData.Name)// 如果玩家名在传送点配置中
                {
                    SubsystemGameInfo subsystemGameInfo = playerData.m_subsystemGameInfo; // 获取SubsystemGameInfo实例
                    subsystemGameInfo.WorldSettings.GameMode = GameMode.Creative; // 设置游戏模式为创造模式
                    playerData.ComponentPlayer.ComponentHealth.IsInvulnerable = true; // 设置玩家无敌
                    isCreative = true; // 设置标记为true
                    return; // 退出
                }
                else
                {
                    SubsystemGameInfo subsystemGameInfo = playerData.m_subsystemGameInfo; // 获取SubsystemGameInfo实例
                    subsystemGameInfo.WorldSettings.GameMode = GameMode.Survival; // 设置游戏模式为生存模式 <--默认游戏模式 改这里
                }
            }            
        }

        public void PlayerLeave(PlayerData playerData)//玩家离开游戏事件
        {
            // 这里可以做一些玩家离开游戏后的处理
            SubsystemGameInfo subsystemGameInfo = playerData.m_subsystemGameInfo; // 获取SubsystemGameInfo实例
            subsystemGameInfo.WorldSettings.GameMode = GameMode.Survival; // 设置游戏模式为生存模式
        }
    }
    public class ww : AbstractProcessCmd
    {
        public override string Cmd => "ww";

        public override string Introduce => "TE";

        public override int AuthLevel => 0;

        public override DisplayType Display => DisplayType.All;

        public override void ProcessCmd()
        {
            // 这里写命令处理逻辑
            string e = m_messageDatas[1];
            if (e == "0")
            {
                Log.Information("ww");
            }
        }
    }
}
